package pe.bf.extranet.ejb;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.sql.DataSource;

import pe.bf.domain.bean.Contacto;
import pe.bf.domain.bean.Empresa;
import pe.bf.domain.constantes.Constantes;
import pe.bf.domain.exceptions.DomainException;
import pe.bf.extranet.dao.EmpresaDAO;
import pe.bf.extranet.dao.impl.EmpresaDAOImpl;

/**
 * Session Bean implementation class EmpresaEJB
 */
@WebService
@Singleton
@LocalBean
public class EmpresaEJB {
	@Resource(name = Constantes.JNDI_DATASOURCE)
	public DataSource dataSource;

	public EmpresaDAO EmpresaDAO;

	/**
	 * Default constructor.
	 */
	public EmpresaEJB() {
		// TODO Auto-generated constructor stub
	}

	@WebMethod
	public Long crearEmpresa(Empresa Empresa) {
		try {

			return EmpresaDAO.crearEmpresa(Empresa).getIdEmpresa();
		} catch (DomainException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return -1L;
		}
	}

	@WebMethod
	public boolean bajaEmpresa(Empresa Empresa) {
		try {
			EmpresaDAO.bajaEmpresa(Empresa);
			return true;
		} catch (DomainException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}

	@WebMethod
	public boolean actualizarEmpresa(Empresa Empresa) {
		try {
			EmpresaDAO.actualizarEmpresa(Empresa);
			return true;
		} catch (DomainException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}

	@WebMethod
	public List<Empresa> listarEmpresa() {
		List<Empresa> lista = new ArrayList<Empresa>();
		try {
			lista = EmpresaDAO.listarEmpresas();
		} catch (DomainException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return lista;
	}

	@WebMethod
	public Empresa buscarEmpresa(Empresa empresa) {
		List<Empresa> lista = new ArrayList<Empresa>();
		try {
			lista = EmpresaDAO.buscarEmpresa(empresa);

			if (lista == null || lista.isEmpty()) {
				return new Empresa();
			}

		} catch (DomainException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return lista.get(0);
	}

	@WebMethod
	public List<Contacto> listarContactosEmpresas(Empresa empresa) {
		List<Contacto> lista = new ArrayList<Contacto>();
		try {
			lista = EmpresaDAO.listarContactosEmpresas(empresa);

		} catch (DomainException e) {
			e.printStackTrace();
		}
		return lista;
	}

	@WebMethod
	public boolean crearContactos(long idEmpresa, List<Contacto> contactos) {
		try {
			EmpresaDAO.limpiarContactos(idEmpresa);
			for (Contacto contacto : contactos) {
				EmpresaDAO.registrarContacto(idEmpresa, contacto);
			}
			return true;
		} catch (DomainException e) {
			e.printStackTrace();
			return false;
		}
	}

	@PostConstruct
	public void init() {
		EmpresaDAO = new EmpresaDAOImpl(dataSource);
	}

}
